/**
 * 给你一个由 正 整数组成的数组 nums 。
 *
 * 如果nums 的子数组中位于 不同 位置的每对元素按位 与（AND）运算的结果等于 0 ，则称该子数组为 优雅 子数组。
 *
 * 返回 最长 的优雅子数组的长度。
 *
 * 子数组 是数组中的一个 连续 部分。
 *
 * 注意：长度为 1 的子数组始终视作优雅子数组。
 *
 * https://leetcode.cn/problems/longest-nice-subarray/
 *思路：动态规划
 */
class LongestNiceSubarray {
    public int longestNiceSubarray(int[] nums) {
        int len=nums.length;
        int[] dp=new int[len];
        Arrays.fill(dp,1);
        int max=1;
        for(int i=1;i<len;i++) {
            dp[i]=dp[i-1]+1;
            for(int j=i-1;j>=i-dp[i-1];j--) {
                if((nums[j]&nums[i])!=0) {
                    dp[i]=i-j;
                    break;
                }
            }
            max=Math.max(max,dp[i]);
        }
        return max;
    }
}